package name.marz.to.go.ahg.core;

import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import name.marz.to.go.ahg.core.exception.UserProcessException;

import org.apache.http.client.ClientProtocolException;
import org.jsoup.nodes.Document;

/**
 * 
 * @author mgoto
 *
 */
public abstract class AbstractAutoGetterMain extends AbstractMain {
	private static final Logger log = Logger.getLogger(AbstractAutoGetterMain.class.getName());

	/**
	 * 主処理
	 * @throws Exception
	 */
	@Override
	protected void go() throws Exception {
		log.info("トップページ処理開始");
		Document doc = goTopPage();
		log.info("トップページ処理終了");
		log.info("ログイン処理開始");
		doc = doLogin(doc);
		log.info("ログイン処理終了 ");
		try {
			log.info("ダウンロードページへの遷移処理開始");
			doc = goDownloadPage(doc);
			log.info("ダウンロードページへの遷移処理終了");
			log.info("ダウンロード処理開始");
			doDownload(doc);
			log.info("ダウンロード処理終了 ");
		} catch (Exception e) {
			log.log(Level.SEVERE,"エラーが発生しました",e);
			throw new Exception(e);
		} finally {
			log.info("ログアウト処理開始");
			try {
				doLogout(doc);
			} catch (Exception e) {
				log.log(Level.WARNING,"ログアウト処理でエラーが発生しましたが、処理を継続します。詳細は以下メッセージ",e);
			}
			log.info("ログアウト処理終了");
		}
	}
	
	public abstract Document goTopPage() throws ClientProtocolException, IOException,UserProcessException;
	public abstract Document doLogin(Document doc) throws ClientProtocolException, IOException,UserProcessException;
	public abstract Document goDownloadPage(Document doc)  throws ClientProtocolException, IOException,UserProcessException;
	public abstract File doDownload(Document doc)  throws ClientProtocolException, IOException,UserProcessException;
	public abstract void doLogout(Document doc)  throws ClientProtocolException, IOException,UserProcessException;
}
